Skip to content

iceoryx2 命令行工具:服务发现、数据注入与录制回放 ​

共享内存通信的系统排查起来有个天然困难:数据不经过网络,tcpdump 这类抓包工具全无用武之地。iceoryx2 提供了一套 iox2 命令行工具补上这块空白:查看节点与服务状态、订阅实时数据、手动注入消息与事件、录制回放整段通信。本文按「观测 → 注入 → 录制回放」的排查思路整理常用命令,适合正在用 iceoryx2 做开发的工程师。

安装与总览 ​

bash
cargo install iceoryx2-cli

安装后 iox2 按子命令分发到各子工具,iox2 --list 查看全部子命令。

节点与服务发现 ​

排查从「现在有哪些参与方、哪些服务」开始:

bash
# 列出所有节点
iox2 node list

# 查看节点详情
iox2 node details 00000000067ab750000005550000dcf7

# 列出所有服务
iox2 service list

节点 ID 是一个长十六进制数字,node details 可以看到该节点的详细信息。服务异常、节点未注册之类的问题,先在这里确认现场。

观测:订阅数据与监听事件 ​

不动任何进程,从外部看服务里流动的数据:

bash
# 订阅服务的实时数据流
iox2 service subscribe "distance_to_obstacle"

# 监听服务的事件通知(检查通知是否送达)
iox2 service listen "distance_to_obstacle"

subscribe 用于发布订阅类服务——数据没按预期发送、字段值不对,直接在这里看;listen 用于事件类服务——事件通知是否真的发出去了,一听便知。

注入:制造测试场景 ​

排查不应只靠等现场复现,iox2 可以主动注入数据制造条件:

bash
# 发送事件通知,直接触发对端响应
iox2 service notify --event-id 5 --num 10 distance_to_obstacle

手动发布一条消息需要先拿到数据的十六进制表示(--message 参数按十六进制字节传 payload):

bash
iox2 service publish -d IOX2DUMP --type-name Distance --type-size 16 \
  --type-alignment 8 --type-variant FIXEDSIZE --repetitions 10 \
  --message "09 00 00 00 1b 00 00 00 ae 47 e1 7a 14 8d bc 40" \
  distance_to_obstacle

参数里 --type-size、--type-alignment、--type-variant 必须与接收方类型定义一致,否则对方按自己的布局解析会得到乱数据。拿不准布局时,可以先用 subscribe 观测一条正常报文的十六进制,照着构造。

录制与回放 ​

现场数据可遇不可求,录制下来离线复现:

bash
# 录制数据流(-t 指定时长秒数,-o 指定输出文件)
iox2 service record -t 10 -o record.dat "distance_to_obstacle"

# 回放
iox2 service replay -i record.dat

录制文件包含两部分:元数据(服务信息、消息模式等)与带时间戳的十六进制有效载荷。典型用法是现场录一段异常数据,回办公室用 replay 反复回放给修复后的程序,验证行为是否正确,不用等下一次现场异常。

适用场景速查 ​

症状 工具
节点或服务状态异常 node list / node details / service list
数据未按预期发送、值可疑 service subscribe
事件通知疑似丢失 service listen
需要模拟特定输入触发问题 service notify / service publish
算法修复后需要复现当时数据 service record + service replay

要点 ​

  • 共享内存通信排查靠 iox2,网络抓包工具看不到数据
  • 观测三件套:service list 看现场、subscribe 看数据、listen 看事件
  • 注入数据时类型布局参数必须与接收方一致
  • 录制回放让「异常复现」不再依赖现场条件
最近更新

基于 VitePress 构建